home *** CD-ROM | disk | FTP | other *** search
/ Aminet 48 / Aminet 48 (2002)(GTI - Schatztruhe)[!][Apr 2002].iso / Aminet / text / edit / vim60rt.lha / Vim / vim60 / ftplugin / spec.vim < prev    next >
Encoding:
Text File  |  2001-05-03  |  3.5 KB  |  127 lines

  1. " Plugin to update the %changelog section of RPM spec files
  2. " Filename: spec.vim
  3. " Maintainer: Gustavo Niemeyer <niemeyer@conectiva.com>
  4. " Last Change: Thu, 03 May 2001 14:52:48 -0300
  5.  
  6. if exists("b:did_ftplugin")
  7.     finish
  8. endif
  9. let b:did_ftplugin = 1
  10.  
  11. if !exists("no_plugin_maps") && !exists("no_spec_maps")
  12.     if !hasmapto("<Plug>SpecChangelog")
  13.         map <buffer> <LocalLeader>c <Plug>SpecChangelog
  14.     endif
  15. endif
  16.  
  17. noremap <buffer> <unique> <script> <Plug>SpecChangelog :call <SID>SpecChangelog("")<CR>
  18.  
  19. if !exists("*s:SpecChangelog")
  20.     function s:SpecChangelog(format)
  21.         if strlen(a:format) == 0
  22.             if !exists("g:spec_chglog_format")
  23.                 let email = input("Email address: ")
  24.                 let g:spec_chglog_format = "%a %b %d %Y " . l:email
  25.                 echo "\r"
  26.             endif
  27.             let format = g:spec_chglog_format
  28.         else
  29.             if !exists("g:spec_chglog_format")
  30.                 let g:spec_chglog_format = a:format
  31.             endif
  32.             let format = a:format
  33.         endif
  34.         let line = 0
  35.         let name = ""
  36.         let ver = ""
  37.         let rel = ""
  38.         let nameline = -1
  39.         let verline = -1
  40.         let relline = -1
  41.         let chgline = -1
  42.         while (line <= line("$"))
  43.             let linestr = getline(line)
  44.             if (name == "" && linestr =~? '^Name:')
  45.                 let nameline = line
  46.                 let name = substitute(strpart(linestr,5), '^[     ]*\([^     ]\+\)[        ]*$','\1','')
  47.             elseif (ver == "" && linestr =~? '^Version:')
  48.                 let verline = line
  49.                 let ver = substitute(strpart(linestr,8), '^[     ]*\([^     ]\+\)[        ]*$','\1','')
  50.             elseif (rel == "" && linestr =~? '^Release:')
  51.                 let relline = line
  52.                 let rel = substitute(strpart(linestr,8), '^[     ]*\([^     ]\+\)[        ]*$','\1','')
  53.             elseif (linestr =~? '^%changelog')
  54.                 let chgline = line
  55.                 execute line
  56.                 break
  57.             endif
  58.             let line = line+1
  59.         endwhile
  60.         if (nameline != -1 && verline != -1 && relline != -1)
  61.             let include_release_info = exists("g:spec_chglog_release_info")
  62.         else
  63.             let include_release_info = 0
  64.         endif
  65.         if (chgline == -1)
  66.             let option = confirm("Can't find %changelog. Create one? ","&End of file\n&Here\n&Cancel",3)
  67.             if (option == 1)
  68.                 call append(line("$"),"")
  69.                 call append(line("$"),"%changelog")
  70.                 execute line("$")
  71.                 let chgline = line(".")
  72.             elseif (option == 2)
  73.                 call append(line("."),"%changelog")
  74.                 normal j
  75.                 chgline = line(".")
  76.             endif
  77.         endif
  78.         if (chgline != -1)
  79.             let parsed_format = "* ".strftime(format)
  80.             let release_info = "+ ".name."-".ver."-".rel
  81.             let wrong_format = 0
  82.             let wrong_release = 0
  83.             let insert_line = 0
  84.             if (getline(chgline+1) != parsed_format)
  85.                 let wrong_format = 1
  86.             endif
  87.             if (include_release_info && getline(chgline+2) != release_info)
  88.                 let wrong_release = 1
  89.             endif
  90.             if (wrong_format || wrong_release)
  91.                 if (include_release_info && !wrong_release && !exists("g:spec_chglog_never_increase_release"))
  92.                     let option = confirm("Increase release? ","&Yes\n&No",1)
  93.                     if (option == 1)
  94.                         execute relline
  95.                         normal 
  96.                         let rel = substitute(strpart(getline(relline),8), '^[     ]*\([^     ]\+\)[        ]*$','\1','')
  97.                         let release_info = "+ ".name."-".ver."-".rel
  98.                     endif
  99.                 endif
  100.                 let n = 0
  101.                 call append(chgline+n, parsed_format)
  102.                 if include_release_info
  103.                     let n = n + 1
  104.                     call append(chgline+n, release_info)
  105.                 endif
  106.                 let n = n + 1
  107.                 call append(chgline+n,"- ")
  108.                 let n = n + 1
  109.                 call append(chgline+n,"")
  110.                 let insert_line = chgline+n
  111.             else
  112.                 let line = chgline
  113.                 if !exists("g:spec_chglog_prepend")
  114.                     while !(getline(line+2) =~ '^\( *\|\*.*\)$')
  115.                         let line = line+1
  116.                     endwhile
  117.                 endif
  118.                 call append(line+1,"- ")
  119.                 let insert_line = line+2
  120.             endif
  121.             execute insert_line
  122.             startinsert!
  123.         endif
  124.     endfunction
  125. endif
  126.  
  127.